/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * verPruebasPacientes.java
 *
 * Created on 03-jun-2011, 16:40:11
 */

package interfaces;

import Controlador.Controlador;
import GestorCitas.Cita;
import GestorPruebas.EstadoPrueba;
import GestorPruebas.Prueba;
import GestorPruebas.TipoPrueba;
import GestorUsuarios.IDException;
import GestorUsuarios.Usuario;
import clinica.*;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.jdesktop.application.Action;

/**
 *
 * @author antonio
 */
public class verPruebasPacientes extends javax.swing.JPanel {

    public class MyRenderer extends DefaultTableCellRenderer {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                                                     boolean isSelected, boolean hasFocus,
                                                     int row, int column) {
            ImageIcon icon = null;
            if(value.equals("Si")) {
                icon = new ImageIcon(getClass().getResource("/interfaces/resources/Box-green-32.png"));
            } else if(value.equals("No"))
                icon = new ImageIcon(getClass().getResource("/interfaces/resources/Box-red-32.png"));

            setIcon(icon);
            setHorizontalAlignment(CENTER);
            return this;
      }
    }
    
    ClinicaView app;
    Prueba _l_prueba[] = null;
    
    /** Creates new form verPruebasPacientes */
    public verPruebasPacientes( ClinicaView a ) {
        initComponents();
        app = a;

        String[] columnNames = {"Nombre Paciente","Tipo Prueba","Fecha prueba","Resultados"};
        modelo = new DefaultTableModel(null, columnNames);
        linea_prueba.setModel(modelo);
        linea_prueba.getColumn("Resultados").setCellRenderer(new MyRenderer());
        linea_prueba.setRowHeight(32);
        linea_prueba.getColumn("Resultados").setWidth(80);
        linea_prueba.getColumn("Resultados").setMinWidth(80);
        linea_prueba.getColumn("Resultados").setMaxWidth(80);

        linea_prueba.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        // Cargamos los eventos para el ratón linea_cita
        linea_prueba.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (linea_prueba.getSelectedRow() >= 0)
                    btnbuscar.setEnabled(true);
            }
        });

        btnbuscar.setEnabled(false);
    }

    public void rellenaDatos () throws SQLException, IOException, ClassNotFoundException, NoSuchAlgorithmException, ParseException {
        DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        btnbuscar.setEnabled(false);
        limpiaDatos();

        //Obtenemos las pruebas del medico
        try {
            _l_prueba = Controlador.consultarPruebas(null, null, Controlador.getUsuarioActivo().getIdUsuario(), null, null, null, null);
        } catch (IDException ex) {
            Logger.getLogger(verPruebasPacientes.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (_l_prueba != null ) {
        //Nos quedamos todas menos las no_realizadas o las canceladas
        ArrayList<Prueba> correctas = new ArrayList<Prueba>();
        for ( Prueba p: _l_prueba ) {
            if ( p.getEstadoPrueba() != EstadoPrueba.No_realizada && p.getEstadoPrueba() != EstadoPrueba.Cancelada
                    && p.getEstadoPrueba() != EstadoPrueba.Visualizable)
                   correctas.add(p);
        }
        _l_prueba = new Prueba[correctas.size()];
        _l_prueba = correctas.toArray(_l_prueba);

        // Colocamos las pruebas en la tabla    
        String[] columnNames = {"Nombre Paciente","Tipo Prueba","Fecha prueba","Resultados"};
        Object[][] data = new Object[_l_prueba.length][];
        Usuario u = null;
        for(int i=0;i<_l_prueba.length;i++) {
                try{
                    u = Usuario.get(_l_prueba[i].getIdPaciente());
                }catch (SQLException ex) {}
                
                    String resultados = "No";
                    if (_l_prueba[i].getEstadoPrueba() == EstadoPrueba.Realizada || _l_prueba[i].getEstadoPrueba() == EstadoPrueba.Visualizable) {
                        resultados = "Si";
                    }
                    String tipo ;
                    if (_l_prueba[i].getTipo() == TipoPrueba.BioquimicaGeneral)
                        tipo = "Bioquimía general";
                    else if (_l_prueba[i].getTipo() == TipoPrueba.HematologiaGeneral)
                        tipo = "Hematología general";
                    else if (_l_prueba[i].getTipo() == TipoPrueba.Hemostasia)
                        tipo = "Hemostasia";
                    else if (_l_prueba[i].getTipo() == TipoPrueba.Hormonas)
                        tipo = "Hormonas";
                    else if (_l_prueba[i].getTipo() == TipoPrueba.MarcadoresTumorales)
                        tipo = "Marcadores tumorales";
                    else if (_l_prueba[i].getTipo() == TipoPrueba.Radiografia)
                        tipo = "Radiografía";
                    else
                        tipo = "Análisis de orina";
                    data[i] = new Object[4];
                    data[i][0] = u.getNombre() + " " + u.getApellidos() ;
                    data[i][1] = tipo;
                    data[i][2] = formatoFecha.format(_l_prueba[i].getFecha());
                    data[i][3] = resultados;
        }

        modelo = new DefaultTableModel(data, columnNames) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };

        linea_prueba.setModel(modelo);
        linea_prueba.getColumn("Resultados").setCellRenderer(new MyRenderer());
        linea_prueba.setRowHeight(32);
        linea_prueba.getColumn("Resultados").setWidth(80);
        linea_prueba.getColumn("Resultados").setMinWidth(80);
        linea_prueba.getColumn("Resultados").setMaxWidth(80);

        }

    }

    void limpiaDatos () {
        Interfaz.limpiarTabla(linea_prueba);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnbuscar = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        jPanel7 = new javax.swing.JPanel();
        jScrollPane7 = new javax.swing.JScrollPane();
        linea_prueba = new javax.swing.JTable();

        setMinimumSize(new java.awt.Dimension(780, 472));
        setPreferredSize(new java.awt.Dimension(780, 472));

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance().getContext().getActionMap(verPruebasPacientes.class, this);
        btnbuscar.setAction(actionMap.get("pruebaDetallada")); // NOI18N
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance().getContext().getResourceMap(verPruebasPacientes.class);
        btnbuscar.setIcon(resourceMap.getIcon("btnbuscar.icon")); // NOI18N
        btnbuscar.setName("btnbuscar"); // NOI18N

        jButton1.setAction(actionMap.get("aceptar")); // NOI18N
        jButton1.setIcon(resourceMap.getIcon("jButton1.icon")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N

        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Pruebas de pacientes atendidos", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, Interfaz.setFontSize()));
        jPanel7.setName("jPanel7"); // NOI18N

        jScrollPane7.setName("jScrollPane7"); // NOI18N

        linea_prueba.setFont(Interfaz.setFontSize());
        linea_prueba.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nombre Paciente", "Tipo prueba", "Fecha Prueba", "Resultados"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        linea_prueba.setName("linea_prueba"); // NOI18N
        jScrollPane7.setViewportView(linea_prueba);

        org.jdesktop.layout.GroupLayout jPanel7Layout = new org.jdesktop.layout.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .add(jScrollPane7, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 684, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .add(jScrollPane7, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE)
                .addContainerGap())
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel7, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(layout.createSequentialGroup()
                        .add(btnbuscar, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 92, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 564, Short.MAX_VALUE)
                        .add(jButton1)))
                .add(24, 24, 24))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel7, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(btnbuscar)
                    .add(jButton1))
                .add(23, 23, 23))
        );
    }// </editor-fold>//GEN-END:initComponents

    @Action
    public void aceptar() {
        app.volver(Interfaces.PRINCIPAL_MEDICO);
    }

    @Action
    public void pruebaDetallada() throws IOException, ClassNotFoundException, SQLException, NoSuchAlgorithmException, ParseException, IDException {
        //llamada a ver el historial detallado
        int row = linea_prueba.getSelectedRow();
        if (row >= 0) {
            Cita c = null;
            try {
                c = Cita.get(_l_prueba[row].getIdCita());
            } catch (SQLException ex) {}

            //llamada a ver citas detallado
            app.abrirHistorialPacienteDetallado(c, Interfaces.VER_PRUEBAS_PACIENTES);
        }
        

    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnbuscar;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JScrollPane jScrollPane7;
    private javax.swing.JTable linea_prueba;
    // End of variables declaration//GEN-END:variables

    private TableModel modelo;

}
